package com.ruoyi.system.domain;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 库存报损对象 inventory_loss_report
 *
 * @author ruoyi
 * @date 2025-06-01
 */
public class InventoryLossReport extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    private Long id;

    /** 报损单号，唯一标识一次报损操作 */
    @Excel(name = "报损单号，唯一标识一次报损操作")
    private String lossReportNumber;

    /** 报损仓库，记录报损商品所在的仓库名称 */
    @Excel(name = "报损仓库，记录报损商品所在的仓库名称")
    private String lossWarehouseName;

    /** 创建开始时间，记录创建报损单的起始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建开始时间，记录创建报损单的起始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createStartTime;

    /** 创建结束时间，记录创建报损单的结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建结束时间，记录创建报损单的结束时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createEndTime;

    /** 报损类型，标识报损的原因 */
    @Excel(name = "报损类型，标识报损的原因")
    private String lossType;

    /** 报损开始时间，记录实际开始报损操作的时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "报损开始时间，记录实际开始报损操作的时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date lossStartTime;

    /** 报损结束时间，记录实际完成报损操作的时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "报损结束时间，记录实际完成报损操作的时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date lossEndTime;

    /** 报损员工，记录执行报损操作的员工姓名或ID */
    @Excel(name = "报损员工，记录执行报损操作的员工姓名或ID")
    private String lossEmployee;

    /** 创建员工，记录创建报损单的员工姓名或ID */
    @Excel(name = "创建员工，记录创建报损单的员工姓名或ID")
    private String createEmployee;

    /** 状态，标识报损单的当前状态，默认为“待审核” */
    @Excel(name = "状态，标识报损单的当前状态，默认为“待审核”")
    private String status;

    /** 备注，记录报损操作的额外说明或特殊情况 */
    @Excel(name = "备注，记录报损操作的额外说明或特殊情况")
    private String notes;

    /** 序号，用于排序或标识报损单中的商品顺序 */
    @Excel(name = "序号，用于排序或标识报损单中的商品顺序")
    private Long serialNumber;

    /** 类别，用于区分商品、配品、原料等 */
    @Excel(name = "类别，用于区分商品、配品、原料等")
    private String category;

    /** 分类，用于进一步细分商品类别 */
    @Excel(name = "分类，用于进一步细分商品类别")
    private String subcategory;

    /** 商品名称，记录报损的商品名称 */
    @Excel(name = "商品名称，记录报损的商品名称")
    private String productName;

    /** 规格，描述报损商品的规格信息 */
    @Excel(name = "规格，描述报损商品的规格信息")
    private String specification;

    /** 库存单价，记录报损时该商品的库存单价 */
    @Excel(name = "库存单价，记录报损时该商品的库存单价")
    private BigDecimal inventoryUnitPrice;

    /** 库存数量，记录报损前该商品在仓库的库存数量（可选，根据实际需求决定是否需要） */
    @Excel(name = "库存数量，记录报损前该商品在仓库的库存数量", readConverterExp = "可=选，根据实际需求决定是否需要")
    private Long existingInventory;

    /** 报损数量，记录本次报损的商品数量 */
    @Excel(name = "报损数量，记录本次报损的商品数量")
    private Long lossQuantity;

    /** 总值，记录本次报损商品的总价值（报损数量 * 库存单价） */
    @Excel(name = "总值，记录本次报损商品的总价值", readConverterExp = "报=损数量,*=,库=存单价")
    private BigDecimal totalValue;

    /** 手机号 */
    @Excel(name = "手机号")
    private String phone;

    public void setId(Long id)
    {
        this.id = id;
    }

    public Long getId()
    {
        return id;
    }

    public void setLossReportNumber(String lossReportNumber)
    {
        this.lossReportNumber = lossReportNumber;
    }

    public String getLossReportNumber()
    {
        return lossReportNumber;
    }

    public void setLossWarehouseName(String lossWarehouseName)
    {
        this.lossWarehouseName = lossWarehouseName;
    }

    public String getLossWarehouseName()
    {
        return lossWarehouseName;
    }

    public void setCreateStartTime(Date createStartTime)
    {
        this.createStartTime = createStartTime;
    }

    public Date getCreateStartTime()
    {
        return createStartTime;
    }

    public void setCreateEndTime(Date createEndTime)
    {
        this.createEndTime = createEndTime;
    }

    public Date getCreateEndTime()
    {
        return createEndTime;
    }

    public void setLossType(String lossType)
    {
        this.lossType = lossType;
    }

    public String getLossType()
    {
        return lossType;
    }

    public void setLossStartTime(Date lossStartTime)
    {
        this.lossStartTime = lossStartTime;
    }

    public Date getLossStartTime()
    {
        return lossStartTime;
    }

    public void setLossEndTime(Date lossEndTime)
    {
        this.lossEndTime = lossEndTime;
    }

    public Date getLossEndTime()
    {
        return lossEndTime;
    }

    public void setLossEmployee(String lossEmployee)
    {
        this.lossEmployee = lossEmployee;
    }

    public String getLossEmployee()
    {
        return lossEmployee;
    }

    public void setCreateEmployee(String createEmployee)
    {
        this.createEmployee = createEmployee;
    }

    public String getCreateEmployee()
    {
        return createEmployee;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    public String getStatus()
    {
        return status;
    }

    public void setNotes(String notes)
    {
        this.notes = notes;
    }

    public String getNotes()
    {
        return notes;
    }

    public void setSerialNumber(Long serialNumber)
    {
        this.serialNumber = serialNumber;
    }

    public Long getSerialNumber()
    {
        return serialNumber;
    }

    public void setCategory(String category)
    {
        this.category = category;
    }

    public String getCategory()
    {
        return category;
    }

    public void setSubcategory(String subcategory)
    {
        this.subcategory = subcategory;
    }

    public String getSubcategory()
    {
        return subcategory;
    }

    public void setProductName(String productName)
    {
        this.productName = productName;
    }

    public String getProductName()
    {
        return productName;
    }

    public void setSpecification(String specification)
    {
        this.specification = specification;
    }

    public String getSpecification()
    {
        return specification;
    }

    public void setInventoryUnitPrice(BigDecimal inventoryUnitPrice)
    {
        this.inventoryUnitPrice = inventoryUnitPrice;
    }

    public BigDecimal getInventoryUnitPrice()
    {
        return inventoryUnitPrice;
    }

    public void setExistingInventory(Long existingInventory)
    {
        this.existingInventory = existingInventory;
    }

    public Long getExistingInventory()
    {
        return existingInventory;
    }

    public void setLossQuantity(Long lossQuantity)
    {
        this.lossQuantity = lossQuantity;
    }

    public Long getLossQuantity()
    {
        return lossQuantity;
    }

    public void setTotalValue(BigDecimal totalValue)
    {
        this.totalValue = totalValue;
    }

    public BigDecimal getTotalValue()
    {
        return totalValue;
    }

    public void setPhone(String phone)
    {
        this.phone = phone;
    }

    public String getPhone()
    {
        return phone;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("lossReportNumber", getLossReportNumber())
                .append("lossWarehouseName", getLossWarehouseName())
                .append("createStartTime", getCreateStartTime())
                .append("createEndTime", getCreateEndTime())
                .append("lossType", getLossType())
                .append("lossStartTime", getLossStartTime())
                .append("lossEndTime", getLossEndTime())
                .append("lossEmployee", getLossEmployee())
                .append("createEmployee", getCreateEmployee())
                .append("status", getStatus())
                .append("notes", getNotes())
                .append("serialNumber", getSerialNumber())
                .append("category", getCategory())
                .append("subcategory", getSubcategory())
                .append("productName", getProductName())
                .append("specification", getSpecification())
                .append("inventoryUnitPrice", getInventoryUnitPrice())
                .append("existingInventory", getExistingInventory())
                .append("lossQuantity", getLossQuantity())
                .append("totalValue", getTotalValue())
                .append("phone", getPhone())
                .toString();
    }
}
